﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Claro.QuestionModel;


namespace Claro.AdminInterface
{
    public partial class frmAdmin : Form
    {
        clsEvento evento;
        System.Windows.Forms.Timer tmrQuestao;
        System.Windows.Forms.Timer tmrPlacar;
        int segundosRestantes;
        clsQuestao questaoAtual;

        public frmAdmin()
        {
            InitializeComponent();
            evento = clsEvento.getInstance();
            //dgvGrade.DataSource = evento.ExibirPlacar();
            //dgvGrade.Columns["codGrupo"].Visible = false;

            //Timer do Placar
            tmrPlacar = new System.Windows.Forms.Timer();
            tmrPlacar.Interval = 1000;
            tmrPlacar.Tick += new System.EventHandler(tmrPlacar_Tick);

            tmrPlacar.Start();
            AtualizarBancoQuestoes();

            //dgvQuestoes.Columns["codQuestao"].Visible = false;
            //dgvQuestoes.Columns["textoQuestao"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

            //Monta o timer da questão
            tmrQuestao = new System.Windows.Forms.Timer();
            tmrQuestao.Interval = 1000;
            tmrQuestao.Tick += new System.EventHandler(tmrQuestao_Tick);

            lvwGrade.SmallImageList = imageList1;
            lvwGrade.Font = new Font("Tahoma", lvwGrade.Font.Size + 3, FontStyle.Bold);
        }

        private void AtualizarBancoQuestoes()
        {
            dgvQuestoes.DataSource = clsQuestao.SelecionarQuestoes(evento.codEvento);

        }

        private void frmAdmin_Load(object sender, EventArgs e)
        {

        }

        private void tmrQuestao_Tick(object sender, EventArgs e)
        {
            //Se todos responderam, corrige:
            bool todosRespondidos = true;
            foreach (ListViewItem item in lvwGrade.Items)
            {
                if (item.Tag.ToString() != "1")
                {
                    todosRespondidos = false;
                    break;
                }
            }
            if (todosRespondidos)
            {
                tmrQuestao.Stop();
                Corrigir();
                return;
            }

            //Se o tempo acabou, tambem corrige:
            if (this.segundosRestantes == -1)
            {
                tmrQuestao.Stop();
                //Acabado o tempo, aguarda 2 segundos para fazer a correção
                System.Threading.Thread.Sleep(2000);
                Corrigir();
                return;
            }
            
            //senão só ajusta o relógio
            int minutos = segundosRestantes / 60;
            int segundos = segundosRestantes-- % 60;
            string tempo = String.Format("{0:d2}:{1:d2}", new object[] { minutos, segundos });
            
            lblTimer.Text = tempo;
        }

        private void Corrigir()
        {
            questaoAtual.Corrigir(evento.codEvento);
        }

        private void tmrPlacar_Tick(object sender, EventArgs e)
        {
            //dgvGrade.DataSource = evento.ExibirPlacar();
            DataTable dt = evento.ExibirPlacar();
            lvwGrade.BeginUpdate();

            lvwGrade.Items.Clear();
            foreach (DataRow linha in dt.Rows)
            {
                ListViewItem item = new ListViewItem(linha["nmGrupo"].ToString());
                item.Tag = "0";
                string maquina = linha["maquina"].ToString();
                item.SubItems.Add(maquina);
                item.SubItems.Add(linha["Pontos"].ToString());
                if (maquina == "")
                    item.ImageIndex = 2;
                else
                {
                    item.ImageIndex = (int)linha["Respondido"];
                    item.Tag = linha["Respondido"].ToString();
                }
                lvwGrade.Items.Add(item);
            }

            lvwGrade.EndUpdate();

        }

        private void btnIniciar_Click(object sender, EventArgs e)
        {
            
        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            if (dgvQuestoes.CurrentRow == null)
            {
                if (dgvQuestoes.Rows.Count == 0)
                {
                    DialogResult resp = MessageBox.Show("Não há mais questões nos assuntos escolhidos para este evento\nDeseja encerrar?", "Atenção", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (resp == DialogResult.Yes)
                        //chama a finalizacao
                        Application.DoEvents();
                }
                
                return;
            }
            questaoAtual = (clsQuestao)dgvQuestoes.CurrentRow.DataBoundItem as clsQuestao;
            
            txtQuestao.Text = questaoAtual.textoQuestao;
            
            dgvAlternativas.DataSource = questaoAtual.Alternativas;
            dgvAlternativas.Columns["codAlternativa"].Visible = false;
            dgvAlternativas.Columns["EstaCorreta"].Visible = false;
            dgvAlternativas.Columns["textoAlternativa"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            dgvAlternativas.Columns["EstaCorreta"].HeaderText = "Correta";
            dgvAlternativas.Columns["textoAlternativa"].HeaderText = "Texto";

            questaoAtual.LancarQuestao(evento.codEvento);
            AtualizarBancoQuestoes();

            segundosRestantes = questaoAtual.tempoDisponivel;
            tmrQuestao.Start();
        }

        private void btnMostrarResposta_MouseDown(object sender, MouseEventArgs e)
        {
            dgvAlternativas.Columns["EstaCorreta"].Visible = true;
        }

        private void btnMostrarResposta_MouseUp(object sender, MouseEventArgs e)
        {
            dgvAlternativas.Columns["EstaCorreta"].Visible = false;
        }
    }
}
